const faceapi = require('face-api.js');
const { Canvas, Image } = require('canvas');
const fs = require('fs');
const path = require('path');

// 为face-api.js注册canvas
faceapi.env.monkeyPatch({ Canvas, Image });

const modelsDir = path.join(__dirname, '../models');

// 确保模型目录存在
if (!fs.existsSync(modelsDir)) {
  fs.mkdirSync(modelsDir, { recursive: true });
}

// 下载模型
const downloadModels = async () => {
  console.log('开始下载人脸识别模型...');
  
  const modelUrl = 'https://raw.githubusercontent.com/justadudewhohacks/face-api.js/master/weights';
  
  try {
    // 下载SSD MobileNet模型 - 更稳定的人脸检测
    await faceapi.nets.ssdMobilenetv1.loadFromUri(modelUrl);
    // 下载68点面部特征点模型
    await faceapi.nets.faceLandmark68Net.loadFromUri(modelUrl);
    // 下载人脸识别模型
    await faceapi.nets.faceRecognitionNet.loadFromUri(modelUrl);
    
    // 将模型保存到本地
    const saveModels = async () => {
      await faceapi.nets.ssdMobilenetv1.saveToDisk(modelsDir);
      await faceapi.nets.faceLandmark68Net.saveToDisk(modelsDir);
      await faceapi.nets.faceRecognitionNet.saveToDisk(modelsDir);
      console.log('模型已保存到本地');
    };
    
    await saveModels();
    console.log('模型下载完成');
  } catch (error) {
    console.error('模型下载失败:', error);
  }
};

downloadModels().catch(console.error);